Настройка трассировки¶
В этом руководстве описано, как включить технологическую роль app.roles.tracing и настроить конфигурацию трассировки. Кроме этого, приведены примеры использования трассировки при передаче контекста по сети и получении контекста от клиента.
Смотрите также: Трассировка с использованием Jaeger.
Содержание:
Включение трассировки¶
Технологическая роль app.roles.tracing
включена по умолчанию на всех экземплярах кластера, но не используется, пока она не будет включена
в секции tracing
файла конфигурации (config.yaml
).
Включить трассировку можно с помощью опции app.roles.tracing.enabled:
roles_cfg:
app.roles.tracing:
enabled: true
Настройка частоты трассировки¶
Опция конфигурации tracing.global_sample_rate позволяет определить, как часто будет трассироваться запрос.
Например, tracing.global_sample_rate = 5
означает, что трассируется каждый пятый вызов функции.
В примере установлено значение 0
, запросы при этом не трассируются:
roles_cfg:
app.roles.tracing:
enabled: true
global_sample_rate: 0
Примечание
Рекомендуется установить такое значение параметра, чтобы трассировалось не более 1 запроса в секунду.
Например, при нагрузке 1000 RPS, если функция start_span() вызывается при каждом обращении к базе,
установите значение global_sample_rate = 1000
.
Пример конфигурации трассировки¶
Полная конфигурация трассировки может выглядеть так:
roles_cfg:
app.roles.tracing:
enabled: true
global_sample_rate: 0
sample_rates:
get_token_api: 2
debug_1: 1
base_url: 'http://tracing:9411/api/v2/spans'
api_method: 'POST'
report_interval: 1
spans_limit: 1000
Здесь:
enabled
– включение трассировки;global_sample_rate
– глобальный коэффициент частоты трассировки запросов, при значении0
запросы не трассируются;sample_rates
– коэффициенты частоты трассировки для заданных сегментов (spans);base_url
– URL-адрес сервера, куда отправляются данные трассировки;api_method
– HTTP-метод, который используется для отправки данных трассировки на сервер;report_interval
– интервал в секундах между отправкой данных трассировки на сервер;spans_limit
– максимальное количество сегментов (span) трассировки, которые могут быть сохранены локально на экземпляре Tarantool перед отправкой во внешнюю систему хранения результатов трассировки.
Полное описание опций конфигурации tracing
приведено в соответствующем разделе Справочника по конфигурации.
Примеры использования трассировки¶
Пример использования роли tracing
с передачей контекста по сети:
-- ROUTER
box.schema.func.create('get_token', {
language = 'LUA',
if_not_exists = true,
body = [[
function (param)
local vshard = require('vshard')
local tracing = require('app.roles.tracing')
local context = {}
local span = tracing.start_span(context, 'get_token_router')
local bucket_id = vshard.router.bucket_id_mpcrc32(param)
local _, err = vshard.router.callrw(bucket_id, 'get_token', {context, param}, {})
span:finish({error = err})
end
]],
})
-- STORAGE
box.schema.func.create('get_token', {
language = 'LUA',
if_not_exists = true,
body = [[
function (context, param)
local tracing = require('app.roles.tracing')
local fiber = require('fiber')
local span = tracing.start_span(context, 'get_token_storage')
fiber.sleep(0.01)
span:finish()
end
]],
})
Получение контекста от клиента:
box.schema.func.create('get_token', {
language = 'LUA',
if_not_exists = true,
body = [[
function (ctx, ...)
local tracing = require('app.roles.tracing')
local context = {
trace_id = ctx.trace_id,
span_id = ctx.span_id,
sample = ctx.trace_id ~= nil,
}
local span_1 = tracing.start_span(context, 'span_1')
-- ...
span_1:finish()
end
]],
})